/**
 * @author : andy
 * @description : sse请求状态类，用于用户如果点击多次时，第一次会触发，其他都不会触发请求
 */
import { type ServerSentEventsOptions } from "./sse";
import { getRequestUrl } from "./util";
export default class RequestState {
  private state: Map<string , boolean> = new Map();
  /**
   * 获取请求状态映射中的key
   * @param options sse请求参数
   * @returns 请求状态映射中的key
   */
  getStateKey (options: ServerSentEventsOptions) {
    const { body } = options;
    const requestUrl = getRequestUrl(options);
    const key = requestUrl + (body ? JSON.stringify(body) : '');
    return key;
  }
  /**
   * 添加请求状态
   * @param options sse请求参数
   * @param isRequesting 正在请求中状态
   */
  add (options: ServerSentEventsOptions , isRequesting: boolean) {
    const key = this.getStateKey(options);
    this.state.set(key , isRequesting);
  }
  /**
   * 获取请求状态
   * @param options sse请求参数
   * @returns 布尔值，返回请求状态
   */
  get (options: ServerSentEventsOptions) {
    const key = this.getStateKey(options);
    return this.state.get(key);
  }
  /**
   * 删除请求状态
   * @param options sse请求参数
   */
  delete (options: ServerSentEventsOptions) {
    const key = this.getStateKey(options);
    this.state.delete(key);
  }
  /**
   * 清空请求状态
   */
  clear () {
    this.state.clear();
  }
}